/**
 * 数据操作文件模块
 * 只处理数据 不负责业务
 */

const fs = require('fs');

let dbPath = './db.json';

 // 获取 所有成员列表
exports.find = function (callback) {
    // 这里是异步操作 需要拿到 data这个值  只能用 callback function
    fs.readFile(dbPath,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        callback(null,JSON.parse(data).students);
    });
}


// 获取某个成员 
exports.findById = function (id,callback) {
    fs.readFile(dbPath,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        let students = JSON.parse(data).students;
        let student = students.find(item=>{
            return item.id === parseInt(id);
        });
        callback(null,student);
    });
}

 // 添加成员
exports.save = function (student,callback) {
    fs.readFile(dbPath,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        
        let students = JSON.parse(data).students;
        student.id = students[students.length - 1].id + 1;
        students.push(student);

        // 转字符串存储,注意 原来的json是一个对象 {}
        let fileData = JSON.stringify({
            students: students
        });  
        // 写入文件 
        fs.writeFile(dbPath,fileData,(err)=>{
            if (err) {
                return callback(err)
            }
            callback(null);
        });
    });
}

 // 更新成员
exports.updata = function (student,callback) {
    fs.readFile(dbPath,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        
        let students = JSON.parse(data).students;
        student.id = parseInt(student.id)
        // 这里报错了，注意 id的类型，字符串和数字之间的比较不等
        let result = students.find(item=>{
            return item.id === student.id
        });

        for (const key in student) {
            if (student.hasOwnProperty(key)) {
                result[key] = student[key];
            }
        }

        // 转字符串存储,注意 原来的json是一个对象 {}
        let fileData = JSON.stringify({
            students: students
        });  
        // 写入文件 
        fs.writeFile(dbPath,fileData,(err)=>{
            if (err) {
                return callback(err)
            }
            callback(null);
        });
    });
}

 // 删除学生
exports.delete = function (id,callback) {
    fs.readFile(dbPath,'utf8',(err,data)=>{
        if (err) {
            return callback(err)
        }
        
        let ary = JSON.parse(data).students;
        // 删除 用过滤
        let students = ary.filter(item=>{
            return item.id !== id;
        });

        // 转字符串存储,注意 原来的json是一个对象 {}
        let fileData = JSON.stringify({
            students: students
        });  
        // 写入文件 
        fs.writeFile(dbPath,fileData,(err)=>{
            if (err) {
                return callback(err)
            }
            callback(null);
        });
    });
}

